import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import TreeMap
from pyecharts.globals import ThemeType
df = pd.read_excel('某店铺促销方式分析.xlsx')
total = df['购买人数'].sum()
tree =[]
for i in range (len (df.index)):
    dic = {}
    dic['name'] = df['促销方式'][i]
    dic['value'] = round(int(df['购买人数'][i])/ total * 100,2)
    dic['children'] = [
        {
            'name': df['促销方式'][i]+'-男',
            'value': round(int(df['男'][i]) / total * 100,2)
        },
        {
        'name': df['促销方式'][i] + '-女',
            'value': round (int(df['女'][i]) / total * 100,2)
        }
    ]
    tree.append (dic)
treemap = TreeMap(init_opts=opts.InitOpts(
    width='1000px', height='600px',
    theme=ThemeType.SHINE,page_title='矩形树图'))
treemap.add(series_name='', data=tree,
            label_opts=opts.LabelOpts(formatter='(b} \n\n{c}%'),
            upper_label_opts=opts.LabelOpts(is_show=False),
            levels=[
                opts.TreeMapLevelsOpts(
                    treemap_itemstyle_opts=opts.TreeMapItemStyleOpts(
                        gap_width=2)),
                opts.TreeMapLevelsOpts(
                    treemap_itemstyle_opts=opts.TreeMapItemStyleOpts(
                        gap_width=1))
            ]
)
treemap.set_global_opts(
    title_opts=opts.TitleOpts(
        title='某店铺不同促销方式下男性和女性购买人数占比矩形树图',
        pos_left='center'),
    legend_opts=opts.LegendOpts(is_show=False)
)
treemap.render('例6-3.html')